package simco.framework.gui.graph.iface;

import simco.framework.gui.graph.supp.LineEdge;

/**
 * Toto rozhrani definuje objekt schopny byt svazan s jinym
 * objektem pomoci vazby.
 *  
 * Prostrednictvim metod v tomto rozhrani lze objektu pridavat
 * nove vazby nebo objekt informovat o zmene jiz stavajicich 
 * vazeb.
 * 
 * @author Matej Prokop, mythge@students.zcu.cz
 */
public interface Connectable
{
	/**
	 * Priradi objektu novou vazbu
	 * 
	 * @param attachedEdge konec vazby prirazovane tomuto objektu
	 */
    public void addLine(LineEdge attachedEdge);
    
    /**
     * Zajistuje je-li to potreba aktualizaci (prekresleni)
     * vazby jejich jeden konec je prijat jako parametr. 
     * 
     * Tato metoda je volana pri zmene nektere z vazby 
     * svazane s timto objektem. Ke zmene dochazi pri
     * pohybu druheho konec vazby resp. pri pohybu
     * objektu vlastnici druhy konec vazby. 
     * 
     * @param movedEdge konec vazby vlastneny objektem,
     * nad kterym byla vykonana zmena 
     * 
     */
    public void lineChanged(LineEdge movedEdge);
    
    /**
     * Vraci x-ovou souradnici bodu ve stredu objektu
     * @return x-ova souradnice bodu ve stredu objektu
     */
    public int getMidX();
    
    /**
     * Vraci y-ovou souradnici bodu ve stredu objektu
     * @return y-ova souradnice bodu ve stredu objektu
     */
    public int getMidY();
    
    /**
     * Vraci identifikator objektu
     * @return id objektu
     */
    public long getId();
}
